package net.oschina.app.viewpagerfragment;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import net.oschina.app.R;
import net.oschina.app.base.BaseFragment;
import net.oschina.app.fragment.DefaultFragment;

import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;

/*1. 综合模块滑动界面实现步骤
        * 1. 初始化布局, 将包含页面滑动标签(PageSlidngTabStrip\TabLayout),ViewPager的布局初始化

        （TabLayout\PageSlidngTabStrip)+ViewPager+Fragment
        * 2. 查找关心的控件
        TabLayout
        ViewPager
        * 3. 创建ViewPager数据适配器   PagerAdapter
        FragmentPagerAdapter--> FragmentStatePagerAdapter
        * 4. 初始化页签信息
        : 标签标题   标签所对应的Fragment   传递给Fragment的参数
        * 5. 将数据适配器设置给ViewPager
        * 6. 页签布局(TabLayout)要和ViewPager要绑定/关联*/
public class NewsTabVPFragment_1 extends Fragment {
    @BindView(R.id.tab_layout)
    TabLayout tabLayout;
    @BindView(R.id.vp_news)
    ViewPager viewPager;
    private NewsTabVPAdpater adpater;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        /********************  与界面UI相关 **************************/

        //1. 初始化布局, 将包含页面滑动标签(PageSlidngTabStrip\TabLayout),ViewPager的布局初始化
        View view = inflater.inflate(R.layout.fragment_vp_news, container, false);
        //2. 绑定控件
        ButterKnife.bind(this,view);

        //3.创建ViewPager数据适配器   PagerAdapter
        adpater = new NewsTabVPAdpater(getChildFragmentManager());

        //4. 将数据适配器设置给ViewPager
        viewPager.setAdapter(adpater);
        //5. 页签布局(TabLayout)要和ViewPager要绑定/关联
        tabLayout.setupWithViewPager(viewPager);

     /********************  与数据相关 **************************/
        //6. 初始化页签信息 :与数据相关 :页签的标题  ： 页签对应的片段  ，向片段传递的参数

        onSetupTab();

/*        List<BaseFragment> pagers=new ArrayList<>();
        DefaultFragment fragment=new DefaultFragment();
        fragment.setArguments(getBundle("资讯"));
        pagers.add(fragment);

         fragment=new DefaultFragment();
        fragment.setArguments(getBundle("热点"));
        pagers.add(fragment);

         fragment=new DefaultFragment();
        fragment.setArguments(getBundle("博客"));
        pagers.add(fragment);

         fragment=new DefaultFragment();
        fragment.setArguments(getBundle("推荐"));
        pagers.add(fragment);
         //设置数据
        adpater.setPagers(pagers);*/
        return view;
    }

    /**初始化页签的方法
     * 页签的标题
     * 页签对应的片段
     * 向片段传递的参数
     */
    private void onSetupTab() {
        adpater.addTab("资讯2",DefaultFragment.class,getBundle("你的资讯"));
        adpater.addTab("热点2",DefaultFragment.class,getBundle("你的热点"));
        adpater.addTab("博客2",DefaultFragment.class,getBundle("你的博客"));
        adpater.addTab("推荐2",DefaultFragment.class,getBundle("你的推荐"));
    }

    //取得Bundle
    private Bundle getBundle(String arg) {
        Bundle bundle=new Bundle();
        bundle.putString("key",arg);
        return  bundle;
    }

    //创建页面适配器
    public class NewsTabVPAdpater extends FragmentStatePagerAdapter{
        List<Class<? extends  BaseFragment>> pagers=new ArrayList<>();//每个片段的class列表
        List<String> tabTitles=new ArrayList<>();//页签标题列表
        List<Bundle> bundles=new ArrayList<>();//向每个fragment传递的bundler参数列表

        public NewsTabVPAdpater(FragmentManager fm) {
            super(fm);
        }
        //对外提供一个初始化数据的方法
        public void setPagers(List<Class<? extends  BaseFragment>> pagers){
            this.pagers=pagers;
            notifyDataSetChanged();
        }
        //对外提供一个添加页签的方法
        public void addTab(String title,Class<? extends  BaseFragment> clz,Bundle bundle){
            pagers.add(clz);
            tabTitles.add(title);
            bundles.add(bundle);
            notifyDataSetChanged();
        }
        //取得要展示的片段
        @Override
        public Fragment getItem(int position) {
            /**
             * 实例化对象
             * context
             * 要实例化的片段的class的类名
             * bundle：要传递给片段的参数
             */
            Fragment fragment=Fragment.instantiate(getContext(),pagers.get(position).getName(),bundles.get(position));
            return fragment;
        }
        @Override
        public int getCount() {
            return pagers.size();
        }
        //TabLayout的页签的标题要依赖该方法的返回值
        @Override
        public CharSequence getPageTitle(int position) {
            return tabTitles.get(position);
        }
    }
}
